#!/bin/bash

###############################################
# 过期DHCP租约清理脚本
# 名称：clean_dhcp_lease.sh
# 版本：1.0
# 作者：资深程序员
# 日期：2025-03-23
# 描述：
#   自动清理过期的DHCP租约文件，释放已占用IP。
#   适用于基于ISC DHCP服务器的系统。
#   生成日志文件，记录清理操作。
###############################################

LOG_FILE="/var/log/clean_dhcp_lease.log"
LEASE_DIR="/var/lib/dhcp"  # 默认DHCP租约目录
DHCP_SERVICE="isc-dhcp-server"  # DHCP服务名称

# 记录日志
log() {
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

# 检查权限
if [ "$(id -u)" -ne 0 ]; then
    log "请以root用户身份运行此脚本。"
    exit 1
fi

# 检查并安装依赖
check_install() {
    local tool="$1"
    if ! command -v "$tool" &> /dev/null; then
        log "工具 $tool 未安装，正在安装..."
        sudo apt-get update && sudo apt-get install -y "$tool"
    fi
}

# 清理DHCP租约
clean_lease() {
    log "开始清理DHCP租约文件..."

    # 查找DHCP租约目录
    if [ ! -d "$LEASE_DIR" ]; then
        log "未找到默认租约目录，尝试查找其他路径..."
        LEASE_DIR=$(find /var -name "dhcp" -type d 2>/dev/null | grep lib | head -n 1)
        if [ -z "$LEASE_DIR" ]; then
            log "未找到DHCP租约目录，请手动检查。"
            exit 1
        fi
        log "已找到DHCP租约目录：$LEASE_DIR"
    fi

    # 备份租约文件
    cp "$LEASE_DIR/dhcpd.leases" "$LEASE_DIR/dhcpd.leases.bak"
    log "已备份租约文件：$LEASE_DIR/dhcpd.leases.bak"

    # 清理租约文件
    echo "" > "$LEASE_DIR/dhcpd.leases"
    log "已清空DHCP租约文件。"

    # 重启DHCP服务
    log "正在重启DHCP服务：$DHCP_SERVICE..."
    systemctl restart "$DHCP_SERVICE"

    if [ $? -eq 0 ]; then
        log "DHCP服务已成功重启。"
    else
        log "DHCP服务重启失败，请手动检查。"
    fi

    log "DHCP租约清理完成。"
}

# 主程序入口
main() {
    log "过期DHCP租约清理脚本启动..."
    check_install "systemctl"
    clean_lease
}

main "$@"
